package com.example.mongodbdemo.service;


import com.example.mongodbdemo.dao.CommentRepository;
import com.example.mongodbdemo.domin.Comment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;


import java.util.List;

@Service
public class CommentService {
    @Autowired
    private CommentRepository commentRepository;
    @Autowired
    private MongoTemplate mongoTemplate;



    /**
     * 保存一个评论
     * @param comment
     */
    public void savePinglun(Comment comment){
        //如果需要自定义主键，可以在这里指定主键；如果不指定主键，MongoDB会自动生成主键
        //设置一些默认初始值。。。
        //调用dao
        commentRepository.save(comment);
    }

    /**
     * 更新评论
     * @param comment
     */
    public void updatePinglun(Comment comment){
        //调用dao
        commentRepository.save(comment);
    }

    /**
     * 根据id删除评论
     * @param id
     */
    public void deletePinglunById(String id){
        //调用dao
        commentRepository.deleteById(id);
    }

    /**
     * 查询所有评论
     * @return
     */
    public List<Comment> findPinglunList(){
        //调用dao
        return commentRepository.findAll();
    }

    /**
     * 根据id查询评论
     * @param id
     * @return
     */
    public Comment findPinglunById(String id){
        //调用dao
        return commentRepository.findById(id).get();
    }

    /**
     * 根据父id具体实现分页查询
     * @param parentid
     * @param pageNum
     * @param pageSize
     * @return
     */

    public Page<Comment> findPinglunByparentid(String parentid, int pageNum , int pageSize){
        return commentRepository.findByParentid(parentid,PageRequest.of(pageNum,pageSize));
    }

    /**
     * //普通分页
     * @param pageNum
     * @param pageSize
     * @return
     */
//    public Page<Comment> findPage(int pageNum , int pageSize){
//        return commentRepository.findPage(PageRequest.of(pageNum,pageSize));
//    }

    /**
     *  //实现点赞加一（低性能损耗）
     * @param id
     */
    public void updateLikeNum(String id){
        //查询条件
        //Query query =Query.query(Criteria.where("_id").is(id)).addCriteria(xxx).addCriteria(xxx2);可以多个条件查询
        Query query =Query.query(Criteria.where("_id").is(id));
        //更新条件
        Update update =new Update();
        update.inc("likenum");
        //查询条件，更新条件，集合名或者实体类
        mongoTemplate.updateFirst(query,update, Comment.class);
    }

}
